package com.fh.util;


/**
 * 状态码
 * 
 * @author dell、
 *
 */
public class BitStatesUtils {
	/**
	 * @param states 所有的状态值
	 * @param value 需要判断的状态值
	 * @return 是否存在
	 */
	public static boolean hasState(long states,long value){
		
		return (states & value) != 0;
	}
	/**
	 *
	 * @param states 已有的状态值
	 * @param value 需要新增的状态值
	 * @return 新的状态值
	 */
	public static long addState(long states,long value){
		if (hasState(states, value)) {
			return states;
		}
		return (states | value);
	}
	
	/**
	 *
	 * @param states 已有的状态值
	 * @param value 需要删除的状态值
	 * @return 新的状态值
	 */
	public static long removeState(long states,long value){
		if (!hasState(states, value)) {
			return states;
		}
		
		return states ^ value;
	}
	
	/**
	 * @param states 所有的状态值
	 * @param index 要判断状态值的位置
	 * @return 是否存在1
	 */
	public static boolean hasState(String states,int index){
		Long status = Long.parseLong(states,2);
		return (status & 1L << states.length() - index) != 0;
	}
	
	/**
	 * 
	 * @param states 已有的状态值
	 * @param index 需要改变为1状态值的位置
	 * @return 新的状态值
	 */
	public static String addState(String states,int index){
		Long status = Long.parseLong(states,2);
		if (hasState(states, index)) {
			return states;
		}
		return Long.toString((status | 1L << states.length() - index),2);
	}
	
	/**
	 *
	 * @param states 已有的状态值
	 * @param index 需要改变为0状态值的位置
	 * @return 新的状态值
	 */
	public static String removeState(String states,int index){
		Long status = Long.parseLong(states,2);
		if (!hasState(states, index)) {
			return states;
		}
		return Long.toString((status ^ 1L << states.length() - index),2);
	}
	
}
